package com.holim.test;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MyViewFlipper extends Activity implements View.OnTouchListener,
CompoundButton.OnCheckedChangeListener {
	CheckBox checkBox;
	ViewFlipper flipper;
	int flipperIndex;
	ImageView view1, view2, view3, view4, view5, view6, 
		view7, view8, view9, viewb1, viewb2,viewb3;
	float xStart;
	float xEnd;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		viewb1 = (ImageView) findViewById(R.id.viewb1);
		viewb2 = (ImageView) findViewById(R.id.viewb2);
		viewb3 = (ImageView) findViewById(R.id.viewb3);
		view1 = (ImageView) findViewById(R.id.view1);
		view2 = (ImageView) findViewById(R.id.view2);
		view3 = (ImageView) findViewById(R.id.view3);
		view4 = (ImageView) findViewById(R.id.view4);
		view5 = (ImageView) findViewById(R.id.view5);
		view6 = (ImageView) findViewById(R.id.view6);
		view7 = (ImageView) findViewById(R.id.view7);
		view8 = (ImageView) findViewById(R.id.view8);
		view9 = (ImageView) findViewById(R.id.view9);
		view1.setOnTouchListener(this);
		view2.setOnTouchListener(this);
		view3.setOnTouchListener(this);
		view4.setOnTouchListener(this);
		view5.setOnTouchListener(this);
		view6.setOnTouchListener(this);
		view7.setOnTouchListener(this);
		view8.setOnTouchListener(this);
		view9.setOnTouchListener(this);
		checkBox = (CheckBox) findViewById(R.id.chkAuto);
		checkBox.setOnCheckedChangeListener(this);
		//flipper  등록 
		flipper = (ViewFlipper) findViewById(R.id.viewFlipper);
		flipper.setOnTouchListener(this);
		// flipper의 첫화면은 0 번쨰 화면
		flipper.setDisplayedChild(0);
		FlipperIndex(flipperIndex);
	}

	/**
	 * Flipper의 현재 페이지 수를 알려주는 매소드
	 * @param index : 현재 페이지 인덱스 값 
	 */
	private void FlipperIndex(int index){
		// 페이지 나타내는 이미지뷰 초기화 
		viewb1.setImageResource(R.drawable.b2);
		viewb2.setImageResource(R.drawable.b2);
		viewb3.setImageResource(R.drawable.b2);

		// 인덱스의 값에 따라 해당 이미지뷰에 표시 
		switch(index){
		case 0:
			viewb1.setImageResource(R.drawable.b1);
			break;
		case 1:
			viewb2.setImageResource(R.drawable.b1);
			break;
		case 2:
			viewb3.setImageResource(R.drawable.b1);
			break;
		}
	}

	/**
	 * 체크박스 체크시 자동으로 Flipping이 되는 부분
	 */
	@Override
	public void onCheckedChanged(CompoundButton view, boolean isChecked) {

		// 체크박스 선택시 자동으로 flopping 됨
		if (isChecked == true) {
			//좌우 슬라이드 애니메이션
			flipper.setInAnimation(AnimationUtils.loadAnimation(this,
					R.anim.push_left_in));
			flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
					R.anim.push_left_out));
			// 화면은 3000 밀리세컨 마다 넘어감
			flipper.setFlipInterval(3000);
			flipper.startFlipping();
		} else {
			// 자동 Flipping 해지
			flipper.stopFlipping();
		}
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		
		/******************************** Flipper **************************************/
		if (v != flipper)
			return false;
		
		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			xEnd = event.getX(); 
			
		} else if (event.getAction() == MotionEvent.ACTION_UP) {
			
			xStart = event.getX(); 
			// 터치의 시작점과 끝점의 차를 구하여 절대 값을 씌운다 
			// 이 값은 사용자가 터치를 한건지 슬라이드를 한건지 알아내기 위해 사용
			float temp_differenceVal = xEnd- xStart;
			float differenceVal = Math.abs(temp_differenceVal);
			
			Log.i("june", "diff : " + differenceVal);

//			flipper.getWidth()
			// 값이 20 미만이면 터치로 인지하고 flipper내의 오브젝트에 터치에 반응
			if(differenceVal < 20){
				// TODO Auto-generated method stub
				
				
				Log.i("june", "v.getId() : " + v.getId());
				
				showToast(flipper.getDisplayedChild(), event);
//				switch (v.getId()) {
//				
//				case R.id.view1:
//					Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view2:
//					Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view3:
//					Toast.makeText(getApplicationContext(), "3", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view4:
//					Toast.makeText(getApplicationContext(), "4", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view5:
//					Toast.makeText(getApplicationContext(), "5", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view6:
//					Toast.makeText(getApplicationContext(), "6", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view7:
//					Toast.makeText(getApplicationContext(), "7", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view8:
//					Toast.makeText(getApplicationContext(), "8", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				case R.id.view9:
//					Toast.makeText(getApplicationContext(), "9", Toast.LENGTH_SHORT)
//					.show();
//					Log.i("june", "v.getId() : " + v.getId());
//					break;
//				}
//				
			} 
			
			
			
			else {
				
				
				
				// 시작, 끝점의 차가 50 이상이면 슬라이드로 인지하고 flipper가 동작함
				if (xStart < xEnd) {
					float difVal = xEnd- xStart;
					if(difVal > 50){
						flipper.setInAnimation(AnimationUtils.loadAnimation(this,
								R.anim.push_left_in));
						flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
								R.anim.push_left_out));

						flipper.showNext();
						flipperIndex = flipper.getDisplayedChild();//flipper의 현재 위치 인덱스를 가져옴 
						FlipperIndex(flipperIndex);//flipper의 현재 위치를 들고 페이지 표시 매소드 호출 
					}
				} else if (xStart > xEnd) {
					float difVal = xStart- xEnd;
					if(difVal > 50){
						flipper.setInAnimation(AnimationUtils.loadAnimation(this,
								R.anim.push_right_in));
						flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
								R.anim.push_right_out));
						flipper.showPrevious();
						flipperIndex = flipper.getDisplayedChild();//flipper의 현재 위치 인덱스를 가져옴 
						FlipperIndex(flipperIndex);//flipper의 현재 위치를 들고 페이지 표시 매소드 호출 
					}
				}
				
			}
			
		}
		return true;
		/******************************** Flipper **************************************/
	}
	
	Toast t = null;
	public void showToast(int chlidindex, MotionEvent event){
		
		String msg = "null";
		
		int index = 0;
		int index_add = 0;
		
		//차일드인덱스에 따라 2씩 증가해서 에드값 만들기.
		if(chlidindex == 0){
			index_add = 0;
		} else if(chlidindex == 1){
			index_add = 2;
		} else if(chlidindex == 2){
			index_add = 4;
		}
		
		
		int fw = flipper.getWidth();
		
		//플리퍼 범위를 3으로 나눠서 터치된 위치의 값을 가지고 어느뷰가 걸렸는지 체크.
		if(0 < event.getX() &&  fw/3 > event.getX()){
			index = chlidindex + index_add + 1;
			
			
		} else if( fw/3 < event.getX() && fw/3*2 > event.getX() ){
			index = chlidindex + index_add + 2;
			
			
		} else if( fw/3*2 < event.getX() && fw > event.getX()){
			index = chlidindex + index_add + 3;
			
		}
		
		msg = String.valueOf(index);
		
		
		//토스트 중복띄움 방지.
		if(t == null){
			t = Toast.makeText(this, msg, Toast.LENGTH_LONG);
		} else {
			t.setText(msg);
		}
		
		t.show();
	}
	
}